#ifndef HISTORYMESSAGEWIDGET_H
#define HISTORYMESSAGEWIDGET_H

#include <QDialog>
#include <QWidget>
#include <QLineEdit>
#include <QRadioButton>
#include <QDateTimeEdit>
#include <QGridLayout>
#include "model/data.h"
#include <QPushButton>
#include <QLabel>

using model::MessageInfo;
/**********************************************************************************************
 * 表示一条历史消息
 **********************************************************************************************/
class HistoryItem : public QWidget {
    Q_OBJECT
public:
    HistoryItem() {}

    static HistoryItem* makeHistoryItem(const MessageInfo& message);
};

/**********************************************************************************************
 * 表示历史消息展示区
 **********************************************************************************************/
class HistoryMessageWidget : public QDialog
{
    Q_OBJECT
public:
    HistoryMessageWidget(QWidget* parent);
    //点击消息搜索按钮
    void clickSearchBtn();
    void clickSearchBtnDone();

    // 在窗口中添加一个历史消息
    void addHistoryMessage(const MessageInfo& message);
    // 清空窗口中所有的历史消息
    void clear();

    void initScrollArea(QGridLayout* layout);
private:
    // 持有所有的历史消息结果的容器对象
    QWidget* container;

    QLineEdit* searchEdit;
    QRadioButton* keyRadioBtn;
    QRadioButton* timeRadioBtn;
    QDateTimeEdit* begTimeEdit;
    QDateTimeEdit* endTimeEdit;
};


/**********************************************************************************************
 * 针对图片历史消息
 **********************************************************************************************/

class ImageButton : public QPushButton
{
public:
    ImageButton(const QString& fileId, const QByteArray& content);
private:
    QString fileId;
    void updateUI(const QString& fileId, const QByteArray& content);
};

/**********************************************************************************************
 * 针对文件历史消息
 **********************************************************************************************/
class FileLabel : public QLabel {
public:
    FileLabel(const QString& fileId, const QByteArray& content, const QString& fileName);
    void mousePressEvent(QMouseEvent* event) override;
private:
    QString fileId;
    QByteArray content;     //为了另存为
    QString fileName;
    bool loadDone = false;  //是否要从服务器加载图片
};

/**********************************************************************************************
 * 针对语音历史消息
 **********************************************************************************************/
class SoundLabel : public QLabel {
public:
    SoundLabel(const QString& fileId, const QByteArray& content);
    void mousePressEvent(QMouseEvent* event) override;
private:
    QString fileId;
    QByteArray content;
    bool loadDone = false;
};


#endif // HISTORYMESSAGEWIDGET_H
